package mylab.starters.uuid;

import mylab.starters.uuid.exception.IdException;
import mylab.starters.uuid.model.BusinessName;
import mylab.starters.uuid.model.Prefix;

/**
 * <p>
 * 主键生成接口
 * </p>
 */
public interface Uuid {
    /**
     * 生成下一个主键
     *
     * @return 主键
     * @throws IdException 主键生成异常
     */
    long nextId() throws IdException;

    /**
     * （根据业务名称）生成下一个主键
     *
     * @param businessName 业务名称
     * @return 主键
     * @throws IdException 主键生成异常
     */
    long nextId(BusinessName businessName) throws IdException;

    /**
     * 生成下一个主键(带格式)
     *
     * @return 主键(带格式)
     * @throws IdException 主键生成异常
     */
    String nextIdStr() throws IdException;

    /**
     * （根据业务名称）生成下一个主键(带格式)
     *
     * @param businessName 业务名称
     * @param prefix       前缀
     * @return 主键(带格式)
     * @throws IdException 主键生成异常
     */
    String nextIdStr(BusinessName businessName, Prefix prefix) throws IdException;
}
